基础知识-[Javasec]
2022-06-26 12:03:35

Java基础知识-[Javasec]

学习Java安全,跟着廖雪峰老师的博客再过一遍Java基础知识。

Java简介

Java将代码编译成“字节码”,类似抽象的CPU指令,之后针对不同平台开发虚拟机,虚拟机负责加载源码并执行,就可以确保“一次编写,处处运行”

Java版本如下:

  • Java SE: Standard Edition (标准版)
  • Java EE: Enterprise Edition (企业版,在SE的基础上加入大量的API和库)
  • Java ME: Micro Edition (针对嵌入式设备)

在这里插入图片描述

除此之外,还有一些名词需要了解:

  • JDK:Java Development Kit
  • JRE: Java Runtime Environment

JRE是运行Java字节码的虚拟机,JDK可以将Java源码编译成Java字节码,JDK除了包含JRE,还提供了编译器、调试器等开发工具。

在这里插入图片描述

在安装Java的bin目录下有很多可执行文件:

在这里插入图片描述

  • java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码
  • javac:Java的编译器,将Java源码文件(.java后缀)编译成Java字节码文件(.class后缀)
  • jar:将一组.class文件打包成一个jar文件
  • jdb:Java调试器

classpath是JVM用的环境变量,用于指示JVM如何搜索class

jar包可以将package组织的目录层级,以及各个目录下的所有文件(包括.class文件和其他文件)都打成一个jar文件

目录结构:

  • src目录存放Java源码
  • resources目录存放配置文件
  • bin目录存放编译生成的.class文件

Java程序基础

  • Java中规定,某个类定义的public static void main(String[] args)是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。
  • 如果类型名太长,想要忽略变量类型,可以使用var关键字,编译器会根据赋值语句自动推断出变量的类型
  • 三元运算符:b?x:y
  • Java在内存中总是使用Unicode表示字符,一个char保存一个Unicode字符
  • 数组定义使用 类型[],数组变量初始化时,需new 类型[数量]
  • System.out.println() / print() / printf(),其中printf()可以格式化输出
  • java.util.Scanner中的System.out代表标准输出流,而System.in代表标准输入流

面向对象基础

  • 在方法内部,可以使用隐含变量this,它始终指向当前实例,通过this.field就可以访问当前实例的字段

  • 和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符

  • 一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用。调用其他构造方法的语法是this(…)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    fclass Person {
    private String name;
    private int age;

    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }

    public Person(String name) {
    this(name, 18); // 调用另一个构造方法Person(String, int)
    }

    public Person() {
    this("Unnamed"); // 调用另一个构造方法Person(String)
    }
    }
  • 方法名相同,但包含的参数不同,称为方法重载(Overload),方法重载的返回值类型通常都是相同的

  • Java中使用extends关键字来实现继承,通过继承只需要编写额外的功能,不再需要重复代码

  • 在Java中,没有明确写extends的类,编译器会自动加上extends Object。所以,任何类,除了Object,都会继承自某个类。

在这里插入图片描述

  • protected修饰的字段可以被子类访问(以及子类的子类),该关键字可以把字段和方法的访问权限控制在继承树内部

  • 在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法(方法签名相同,并且返回值也相同),被称为覆写(Override)。在子类的覆写方法中,若想调用父类被覆写的方法,通过super调用(若父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Person {
    protected String name;
    public String hello() {
    return "Hello, " + name;
    }
    }

    class Student extends Person {
    @Override
    public String hello() {
    // 调用父类的hello()方法:
    return super.hello() + "!";
    }
    }
  • 多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法

  • 将方法声明为abstract(抽象方法,本身没有实现任何方法语句),但抽象方法无法执行也就影响了整个类无法被实例化,所以类本身也要被抽象化(抽象类)

    1
    2
    3
    abstract class xxx {
    public abstract void run();
    }
  • 若抽象类没有字段,全为抽象方法就可以将其改写为interface( 接口),具体的class去实现一个interface,需要使用implements关键字

    1
    2
    3
    4
    interface Person {
    void run();
    String getName();
    }

    上面也接触了extends(继承),一个类只能继承自另一个类,不能从多个类继承。但一个类可以实现多个interface

  • package(包)解决名字冲突,完整的类名为包名.类名,Java虚拟机执行时,只看完整类名,只要包名不同,类就不同。

    image-20230321113543973

    位于同一个包的类,可以访问包作用域的字段和方法(包作用域),若要引用其他的class,可以通过import导入完整类名。

Maven基础

Maven介绍

Maven是Apache的一个开源项目,主要用于帮助开发者管理项目中jar以及jar之间的依赖关系,最终完成项目编译,测试,打包和发布等工作。

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程
  • 提供了一套依赖管理机制(可以对Jar包进行统一的管理,包括快速引入Jar包,以及对使用的Jar包进行统一的版本控制)

image-20240309170720280

(环境变量配置)

使用Maven管理的java项目,目录结构默认如下:

image-20230321122121013

  1. 项目描述文件pom.xml(使用pom.xml定义项目内容,Maven使用groupIdartifactIdversion唯一定位一个依赖)
  2. src/main/java存放Java源码的目录
  3. src/main/resources存放资源文件的目录
  4. 所有编译、运行的临时文件、最终打包生成的文件都放在target目录里

image-20230321162427086

Maven仓库

Maven仓库是用来存放maven构建的项目和各种依赖的Jar包

  1. 本地仓库:自己计算机中的仓库,用于存储从远程仓库或中央仓库下载的插件和Jar包。
  2. 远程仓库:例如阿里云的maven远程仓库。
  3. 中央仓库:maven软件内置的一个远程仓库地址,由Maven团队维护。

maven本地仓库配置

maven仓库默认在C盘,可以在conf 文件夹下的settings.xml文件中进行修改

image-20240309171922891

配置阿里云远程仓库

image-20240309171959200

IDEA配置Maven

image-20240309173000910

除此之外还需要配置Runner,以避免下载速度很慢,导致创建maven项目时需要很长时间

maven 在创建项目时,会从网络中下载一个叫做archetype-catalog.xml的文件作为项目的模板。

配置该参数后,表示不用下载文件,进而加快项目的创建速度。

image-20240309173613435

Maven测试

创建一个项目进行测试,查看maven是否配置好

image-20240309173713410

但是报错了,查了一下才发现是IDEA和maven版本不兼容

IDEA 2021 兼容maven 3.8.1及之前的所用版本

image-20240309182131673

Prev
2022-06-26 12:03:35
Next